/*
 * ChamatecNegocioException.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.exception;

import java.util.ResourceBundle;

/**
 * Classe de tratamento de exceção negocial.
 * 
 * @author Ludemeula Fernandes de Sá
 */
public class ChamatecNegocioException extends Exception {
	private static final long serialVersionUID = 4222965586800160447L;

	/**
	 * Construtor da classe.
	 *
	 * @param exception
	 */
	public ChamatecNegocioException(Throwable exception) {
		super(exception);
	}

	/**
	 * Construtor da classe.
	 *
	 * @param code
	 * @param params
	 */
	public ChamatecNegocioException(ChamatecExceptionCode code,
			Object... params) {
		super(initLocalizedMessage(code.toString(), params));
	}

	/**
	 * Construtor da classe.
	 *
	 * @param code
	 */
	public ChamatecNegocioException(String code) {
		super(initLocalizedMessage(code));
	}

	/**
	 * Construtor da classe.
	 *
	 * @param code
	 */
	public ChamatecNegocioException(ChamatecExceptionCode code) {
		super(initLocalizedMessage(code.toString()));
	}

	/**
	 * Monta a mensagem de acordo com o código informado na exceção.
	 * 
	 * @param code
	 * @param params
	 * @return
	 */
	private static String initLocalizedMessage(String code, Object... params) {
		try {
			ResourceBundle bundle = ResourceBundle.getBundle("/messages");
			String msg = bundle.getString(code);

			if ((msg == null) || (msg.length() == 0)) {
				msg = code;
			}

			if (params != null && params.length > 0) {
				msg = replaceParameters(bundle, msg, params);
			}

			return msg;
		} catch (Exception e) {
		}
		return code;
	}

	/**
	 * Substiui os parametros pelos valores correspondentes as chaves enviadas.
	 * 
	 * @param bundle
	 * @param message
	 * @param params
	 * @return
	 */
    private static String replaceParameters(ResourceBundle bundle, String message, Object... params){
        if (message.indexOf("{") >= 0) {
            for (int i=0; i < params.length; i++) {
            	String campo = bundle.getString(params[i].toString());
                message=message.replace("{"+i+"}", campo);
            }
        }
        return message;
    }
}